{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tensorflow依赖的Numpy和Pandas和Matplotlib和Sklearn介绍\n",
    "\n",
    "* Numpy：支持多维数组与矩阵运算，针对数组运算提供大量的数学函数库\n",
    "* Pandas：基于NumPy 的一种工具，快速便捷地处理表格类数据、数据分析任务\n",
    "* Matplotlib：Python 的绘图库，可与 NumPy 一起使用，提供了一种有效的 MatLab 开源替代方案\n",
    "* Sklearn (scikit-learn)：基于 Python 语言的机器学习、数据挖掘、数据分析工具，建立在 NumPy,SciPy 和 matplotlib 上"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11]])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.arange(12).reshape(3, 4)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3, 4)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.ndim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 筛选行\n",
    "arr[1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1,  2],\n",
       "       [ 5,  6],\n",
       "       [ 9, 10]])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 筛选列\n",
    "arr[:, 1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 3,  4,  5,  6],\n",
       "       [ 7,  8,  9, 10],\n",
       "       [11, 12, 13, 14]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 基础运算\n",
    "arr + 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2.,  6., 10.])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数组乘法\n",
    "weights = np.array([0.1, 0.2, 0.3, 0.4])\n",
    "np.matmul(arr, weights)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>survived</th>\n",
       "      <th>sex</th>\n",
       "      <th>age</th>\n",
       "      <th>n_siblings_spouses</th>\n",
       "      <th>parch</th>\n",
       "      <th>fare</th>\n",
       "      <th>class</th>\n",
       "      <th>deck</th>\n",
       "      <th>embark_town</th>\n",
       "      <th>alone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>n</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>First</td>\n",
       "      <td>C</td>\n",
       "      <td>Cherbourg</td>\n",
       "      <td>n</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>First</td>\n",
       "      <td>C</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>n</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>y</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   survived     sex   age  n_siblings_spouses  parch     fare  class     deck  \\\n",
       "0         0    male  22.0                   1      0   7.2500  Third  unknown   \n",
       "1         1  female  38.0                   1      0  71.2833  First        C   \n",
       "2         1  female  26.0                   0      0   7.9250  Third  unknown   \n",
       "3         1  female  35.0                   1      0  53.1000  First        C   \n",
       "4         0    male  28.0                   0      0   8.4583  Third  unknown   \n",
       "\n",
       "   embark_town alone  \n",
       "0  Southampton     n  \n",
       "1    Cherbourg     n  \n",
       "2  Southampton     y  \n",
       "3  Southampton     n  \n",
       "4   Queenstown     y  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"./datas/titanic/train.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(627, 10)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 基本属性，形状\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 627 entries, 0 to 626\n",
      "Data columns (total 10 columns):\n",
      " #   Column              Non-Null Count  Dtype  \n",
      "---  ------              --------------  -----  \n",
      " 0   survived            627 non-null    int64  \n",
      " 1   sex                 627 non-null    object \n",
      " 2   age                 627 non-null    float64\n",
      " 3   n_siblings_spouses  627 non-null    int64  \n",
      " 4   parch               627 non-null    int64  \n",
      " 5   fare                627 non-null    float64\n",
      " 6   class               627 non-null    object \n",
      " 7   deck                627 non-null    object \n",
      " 8   embark_town         627 non-null    object \n",
      " 9   alone               627 non-null    object \n",
      "dtypes: float64(2), int64(3), object(5)\n",
      "memory usage: 49.1+ KB\n"
     ]
    }
   ],
   "source": [
    "# 字段列表说明\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>survived</th>\n",
       "      <th>sex</th>\n",
       "      <th>age</th>\n",
       "      <th>n_siblings_spouses</th>\n",
       "      <th>parch</th>\n",
       "      <th>fare</th>\n",
       "      <th>class</th>\n",
       "      <th>deck</th>\n",
       "      <th>embark_town</th>\n",
       "      <th>alone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>n</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>n</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>20.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>39.0</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>31.2750</td>\n",
       "      <td>Third</td>\n",
       "      <td>unknown</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>n</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    survived   sex   age  n_siblings_spouses  parch     fare  class     deck  \\\n",
       "0          0  male  22.0                   1      0   7.2500  Third  unknown   \n",
       "4          0  male  28.0                   0      0   8.4583  Third  unknown   \n",
       "5          0  male   2.0                   3      1  21.0750  Third  unknown   \n",
       "9          0  male  20.0                   0      0   8.0500  Third  unknown   \n",
       "10         0  male  39.0                   1      5  31.2750  Third  unknown   \n",
       "\n",
       "    embark_town alone  \n",
       "0   Southampton     n  \n",
       "4    Queenstown     y  \n",
       "5   Southampton     n  \n",
       "9   Southampton     y  \n",
       "10  Southampton     n  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 筛选\n",
    "df[df[\"sex\"] == \"male\"].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sex     survived\n",
       "female  0            48\n",
       "        1           169\n",
       "male    0           336\n",
       "        1            74\n",
       "dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 聚合统计\n",
    "df.groupby([\"sex\", \"survived\"]).size()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fe3f5ed3a10>]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-10, 10, 100)\n",
    "y = np.sin(x)\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### iris数据集的可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "iris_data = datasets.load_iris()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[5.1, 3.5, 1.4, 0.2],\n",
       "       [4.9, 3. , 1.4, 0.2],\n",
       "       [4.7, 3.2, 1.3, 0.2]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iris_data[\"data\"][:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iris_data[\"target\"][:100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7fe3f3a7fcd0>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(\n",
    "    # 第一列\n",
    "    iris_data[\"data\"][:, 0], \n",
    "    # 第二列\n",
    "    iris_data[\"data\"][:, 1], \n",
    "    # 颜色用target\n",
    "    c=iris_data[\"target\"]\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4. Sklearn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 只用前两列特征\n",
    "X = iris_data.data[:, :2]\n",
    "Y = iris_data.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.82"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性回归经常作为基准模型作为对比\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "# 构建对象\n",
    "logreg = LogisticRegression(solver='lbfgs', max_iter=1000)\n",
    "# 训练\n",
    "logreg.fit(X, Y)\n",
    "# 评估效果\n",
    "logreg.score(X, Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.92"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 传统机器学习非常好用的GBDT\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "# 构建对象\n",
    "clf = GradientBoostingClassifier()\n",
    "# 训练\n",
    "clf.fit(X, Y)\n",
    "# 评估效果\n",
    "clf.score(X, Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
